# -*-coding:utf-8 -*-
# @Time: 2023/3/15 18:29
# @Author: cuishuohao
# @File: demo3
# @Software: PyCharm

def gradient_update(w, b, dataset, alpha):
    # 计算当前模型在数据集dataset上的mse后更新模型的参数值
    # w:权重
    # b:偏置值
    # dataset:数据集
    # alpha:学习率
    # 返回w_update,b_update
    N = len(dataset)  # 样本的总数量
    for i in range(N):
        x = dataset[i, 0]  # 取得第i个样本的特征(x值)
        y = dataset[i, 1]  # 取得第i个样本的标签(y值)
        # 计算w和b的梯度
        w_gradient = (2 / N) * (w * x + b - y) * x  # 公式3.17
        b_gradient = (2 / N) * (w * x + b - y)  # 公式3.18
        # 根据梯度下降法，公式3.15,更新参数
        w_update = w - alpha * w_gradient
        b_update = b - alpha * b_gradient
    return w_update, b_update
